急いで学ぶGo lang#1 概要とセットアップ
Go言語を始める
諸事情によりGoを使ってみることになりました。 弊社では一部の人たちに人気かもしれないGo。 私は名前を知ってる程度の知識だったのですが、いい機会なので学んだ内容をまとめていきます。
動作環境
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.9.4
- GO : 1.4.1
Goとは
GoはGoogleによって開発されているオープンソースのプログラミング言語で、 現状Linux/Mac/Windows/Androidで動作します。 また、最近はGoogle App EngineでもGoを使って実装できるようになったみたいです。 主な特徴は以下のとおり。
- シンプルな言語である
- コンパイル・実行速度が早い
- 同期処理が容易に行える
- ポインタはあるけどポインタ演算はできない
- 過去にあるいろいろな言語の特徴を持つ
- 型継承・ジェネリクス・オーバーロードといった機能がない
- インターフェイスによる多態性を実現
- Cのライブラリから関数よんだりできる
ちなみに、近々AWS SDK for Goがリリースされる予定らしいです。
Goのセットアップ
インストール
まずはGoのセットアップをします。今回はMacでのお話です。 まずはここから環境にあったpkgをダウンロードしてインストールするか、 Homebrewでインストールできます。自分は楽なのでbrew使いました。
% brew install go % go version go version go1.4.1 darwin/amd64
環境変数の設定
Goには設定すべき環境変数が2つあるみたいです。 ただ、こことか見るといらないとか書いてます。 どうやら必須ではないけど、設定しておいたほうが何かと良いらしいです。
設定推奨の環境変数の1つが「GOROOT」。これはGoのツールがあるディレクトリへの参照だそうです。 ようするにJAVA_HOMEみたいなものですかね。 HombebrewでGoをインストールした場合、 /usr/local/opt/go/libexec/ になるようです。(実体は/usr/local/Cellar/go/<バージョン>/libexec/) goディレクトリ自体じゃないので注意。
設定推奨の環境変数その2は「GOPATH」。 これはワークスペースのパスを設定するめたの変数で、Goプロジェクト自体を指定しておけばいいらしいです。 GOPATHはプログラム中のimport文の解決に使われるみたいです。 Goではgo getというコマンドで外部パッケージを読み込むことができるんですが、これを実行すると GOPATHの先頭のディレクトリにダウンロードされます。 なお、GOPATH以下は下記のように決められた構造を持っている必要があります。 GOPATHの下にはsrc(ソース)/bin(バイナリ)/pkg(外部パッケージ)ディレクトリがあること。
$GOPATH=/path/rour/gopath /path/rour/gopath | |ーsrc |ーbin |ーpkg
あとはbash_rcなりzsh_rcなりにexport文をいれておきましょう。
export GOROOT=/usr/local/opt/go/libexec export GOPATH=$HOME/<your go project workspace>
サンプルを動かしましょう
適当な場所に(とりあえず$GOPATH以下にでも)main.goファイルを作成し、 下記内容を記述します。なんとなく何してるかはわかりますね。
package main import "fmt" func main() { fmt.Println("hello world") }
main.goができたら、プログラムを実行します。実行はgo runコマンド。
% go run main.go hello world
とりあえずGoが動く環境はできました。
参考サイトなど
- 公式:http://golang.org/
- これからGoを始める人のためのTips集:http://blog.wacul.co.jp/blog/2014/08/22/go/
- Go言語で幸せになれる10のテクニック: http://qiita.com/ksato9700/items/6228d4eb6d5b282f82f6
- 動的言語だけやってた僕が、38日間Go言語を書いて学んだこと: http://qiita.com/suin/items/22662f43b6a6e8728798#1-2
- build-web-application-with-golang: http://astaxie.gitbooks.io/build-web-application-with-golang/content/ja/